# -*- coding: utf-8 -*- 
# @project : 《Atcoder》
# @Author : created by bensonrachel on 2021/9/7
# @File : D - Snuke Prime（差分加离散化，只记录起点和终点）.py
# 硬生生自己看明白的
def solve():
    ans = 0
    pre_sum = 0
    l = 0
    for key, value in d.items():
        ans += min(C, pre_sum) * (key - l)  # 不包括key的，5-2 = 3，有2 3 4，不包括5，因为key不是属于这一段的，（*）处，如果是其他段的a，那就更不属于这一段了。
        l = key
        pre_sum += value#其实就是模拟数组做法的前缀和，所以是累加 ，只不过只有每一段的第一个的值

    return ans


if __name__ == '__main__':
    """
    跟water heater那道题的思路一样，差分，给多个不同区间加上同一个数
    但是这题需要用离散化，因为如果用数组会超内存，开不了那么大的数组，10**9数量级
    因此需要使用字典来直接把起点和终点的下标存到key中，而value就存放在这个key上的加减变化。
    起点和终点之间的段其实可以省略，最后计算的时候只需要乘以这一段的长度即可。因为你想象如果是用数组做，某两个（中间没有其他不是0的值的点）点之间都是的值0，所以这一段做前缀和是没有变化的
    所以可以用这一段的起点的值乘以长度
    至于为什么要排序，你想象如果是用数组做，不是用字典做，那你就会发现数组下标就是有序的。
    都是闭区间，所以使用a和b+1
    """
    n, C = map(int, input().split())
    r = dict()
    for _ in range(n):
        a, b, c = map(int, input().split())
        if (a in r):
            r[a] += c
        else:
            r[a] = c
        if (b + 1 in r):  # （*）
            r[b + 1] -= c
        else:
            r[b + 1] = -c
    d = dict(sorted(r.items()))
    ans = solve()
    print(ans)